package com.learn.java3y.java.javaArithmetic.datastructure.queue_old;

/**
 * Created by ozc on 2018/3/28.
 *
 * @author ozc
 * @version 1.0
 */
public class QueueTest {


    public static void main(String[] args) {


        //初始化队列
        Queue queue = new Queue();

        queue.front = 0;
        queue.rear = 0;
        queue.arrays = new int[6];

        isEmpty(queue);


        //入队
        enQueue(queue, 3);
        enQueue(queue, 1);
        enQueue(queue, 2);
        enQueue(queue, 4);
        enQueue(queue, 6);


        //遍历队列
        traverseQueue(queue);


        //出队
        outQueue(queue);
        outQueue(queue);
        outQueue(queue);
        outQueue(queue);
        outQueue(queue);
        outQueue(queue);

    }


    /**
     * 判断队列是否满了，front和rear指针紧挨着，就是满了
     * @param queue
     * @return
     */
    public static boolean isFull(Queue queue) {
        if ((queue.rear + 1) % queue.arrays.length == queue.front) {

            System.out.println("关注公众号：Java3y--->此时队列满了！");
            return true;
        } else {
            System.out.println("关注公众号：Java3y--->此时队列没满了！");
            return false;
        }
    }
    /**
     * 判断队列是否空，front和rear指针相等，就是空了
     * @param queue
     * @return
     */
    public static boolean isEmpty(Queue queue) {
        if (queue.rear  == queue.front) {
            System.out.println("关注公众号：Java3y--->此时队列空的！");
            return true;
        } else {
            System.out.println("关注公众号：Java3y--->此时队列非空！");
            return false;
        }
    }

    /**
     * 入队
     *
     * @param queue
     */
    public static void enQueue(Queue queue,int value) {

        // 不是满的队列才能入队
        if (!isFull(queue)) {

            // 将新的元素插入到队尾中
            queue.arrays[queue.rear] = value;

            // rear节点移动到新的无效元素位置上
            queue.rear = (queue.rear + 1) % queue.arrays.length;
        }
    }


    /**
     * 遍历队列
     * @param queue
     *
     */
    public static void traverseQueue(Queue queue) {

        // front的位置
        int i = queue.front;

        while (i != queue.rear) {

            System.out.println("关注公众号：Java3y--->" + queue.arrays[i]);

            //移动front
            i = (i + 1) % queue.arrays.length;
        }

    }


    /**
     * 出队
     *
     * @param queue
     */
    public static void outQueue(Queue queue) {

        //判断该队列是否为null
        if (!isEmpty(queue)) {


            //不为空才出队
            int value = queue.arrays[queue.front];
            System.out.println("关注公众号：Java3y--->出队的元素是：" + value);

            // front指针往后面移
            queue.front = (queue.front + 1) % queue.arrays.length;

        }
    }
}
